// Scripting Definition File for Ike
//	This file is read by ScriptEd.dll via Igor


/*
---ENUMERATED TYPES---
*/
enum CompareOp {"is equal to", "is less than", "is greater than", "is less than or equal to", 
	"is greater than or equal to", "is not equal to"};
enum FloatCompareOp {"is less than", "is greater than"};
enum EqualityOp {"is equal to", "is not equal to"};
enum Decoration {"National Defense Eagle", "Distinguished Marksmanship",
	"Exemplary Conduct Under Duress", "Intelligence Star", "Exceptional Field Service",
	"First Segment Ribbon", "Second Segment Ribbon", "Third Segment Ribbon", "Fourth Segment Ribbon"};
enum Weather {"clear", "rain", "snow"};
enum CompanyColor {"red", "blue", "green", "gold", "neutral"};

/*
---TAG TYPES---
*/
tag Thing;
tag Team : Thing;
tag TeamRef : Team;
tag Platoon : Thing;
tag PlatoonRef : Platoon;
tag Company : Thing;
tag CompanyRef : Company;
tag Location : Thing;
tag Zone : Location;
tag ZoneRef : Zone;
tag Effect : Location;
tag Object : Location;
tag Actor : Location;
tag ActorRef : Actor;
tag Vehicle : Location;
tag VehicleRef : Vehicle;
tag Door;

tag Objective;
tag Plan;

tag Counter;
tag Flag;
tag Timer;

/*
---TRIGGERS---
*/
// Time-based
event Startup() "The simulation is starting.";
event TimeElapsed(float duration=10.0) "%0 second(s) elapsed.";
event TimerExpired(Timer timer) "%0 has expired.";
event TimerExpiredForGame() "The game timer has expired.";

// Space-based
event ProximityActor(Actor actor, Location location, float range=10.0) "%0 is within %2 meter(s) of %1.";
event ProximityTeam(Team team, Location location, float range=10.0) "A member of %0 is within %2 meter(s) of %1.";
event ProximityCompany(Company company, Location location, float range=10.0) "An actor in %0 is within %2 meter(s) of %1.";
event ProximityVehicle(Vehicle vehicle, Location location, float range=10.0) "%0 is within %2 meter(s) of %1.";

// Death
event DeathActor(Actor actor) "%0 has been killed.";
event DeathTeam(Team team) "All members of %0 have been killed.";
event DeathTeamMember(Team team) "A member of %0 has been killed.";
event DeathPlatoon(Platoon platoon) "All members of %0 have been killed.";
event DeathCompany(Company company) "All actors in %0 have been killed.";
event DeathVehicle(Vehicle vehicle) "%0 has been destroyed.";

// Item usage
event ActorFired(Actor actor) "%0 discharged a weapon.";
event DemoChargePlaced(Location location, float range=10.0) "A demo charge was placed within %1 meter(s) of %0.";

event ProximityPlatoon(Platoon platoon, Location location, float range=10.0) "A member of %0 is within %2 meter(s) of %1.";

// Map object states
//event DoorOpened(string door) "%0 has opened.";
//event DoorClosed(string door) "%0 has closed.";
event DoorOpened(Door door) "%0 has opened.";
event DoorClosed(Door door) "%0 has closed.";
event MapObjectDestroyed(string object) "%0 has been destroyed.";

// UI actions, intended for tutorial
event UICommandModeActivated() "The player activated Command Mode.";
event UITeamSelected() "The player selected a fire team.";
event UIWaypointSet() "The player set a waypoint.";
event UIFireFieldSet() "The player set a field of fire.";
event _UIActionSet() "The player set an action point."; // obsolete
event UIROESet() "The player set an ROE.";

// Escorting captives and hostages
event EscortInitiated(Actor actor) "The escort of %0 has begun.";
event EscortAborted(Actor actor) "The escort of %0 has been aborted.";
event EscortCompleted(Actor actor) "The escort of %0 has been completed.";

// Rout (actors fled or killed)
event RoutActor(Actor actor) "%0 has fled or been killed.";
event RoutTeam(Team team) "All members of %0 have fled or been killed.";
event RoutPlatoon(Platoon platoon) "All members of %0 have fled or been killed.";
event RoutCompany(Company company) "All actors in %0 have fled or been killed.";

// Direct call
event Call() "This block has been called directly from the script.";

// Looping
event LoopActors(ActorRef actor) "An actor loop is ready to process %0.";
event LoopTeams(TeamRef team) "A team loop is ready to process %0.";
event LoopPlatoons(PlatoonRef platoon) "A platoon loop is ready to process %0.";
event LoopCompanies(CompanyRef company) "A company loop is ready to process %0.";

event PreAction() "The simulation is initializing.";

event NoPlayersLeft() "All players have died or left the game.";

// Object manipulation
event ObjectManipulated(string object) "%0 has been manipulated.";

event DeathAnyActor(ActorRef actor) "%0 has been killed.";

/*
---RESPONSES--- (always return void)
*/
// Timers, flags, and counters
void TimerSet(Timer timer, float duration) "Set %0 to expire in %1 second(s).";
void TimerKill(Timer timer) "Cancel %0.";
void FlagSet(Flag flag, bool state=true) "Set %0 to %1.";
void CounterSet(Counter counter, int value=0) "Set %0 to %1.";
void CounterIncrement(Counter counter) "Increment %0.";
void CounterDecrement(Counter counter) "Decrement %0.";

// Variables
void VariableSetTeam(TeamRef variable, Team team) "Set %0 to %1.";
void VariableSetPlatoon(PlatoonRef variable, Platoon platoon) "Set %0 to %1.";
void VariableSetCompany(CompanyRef variable, Company company) "Set %0 to %1.";
void VariableSetActor(ActorRef variable, Actor actor) "Set %0 to %1.";
void VariableSetVehicle(VehicleRef variable, Vehicle vehicle) "Set %0 to %1.";

// Conditionals
void StopIf(bool condition) "Skip the remaining responses if %0.";
void ContinueIf(bool condition) "Continue executing responses if %0.";

// Script management
void BlockPreserve() "Allow this block to be reactivated.";
void BlockRemove() "Prevent this block from being reactivated.";
void GroupEnable(Group group) "Enable the %0 script blocks.";
void GroupDisable(Group group) "Disable the %0 script blocks.";

// Messages
void DisplayMessageAll(string text) "Display %0 to all players.";
void DisplayMessagePlayer(string text, Actor player) "Display %0 to %1.";
void DisplayMessageCompany(string text, Company company) "Display %0 to all members of %1.";

// Mission termination
void DeclareMissionComplete(string text) "Display %0 and register mission completion.";
void DeclareMissionFailed(string text) "Display %0 and register mission failure.";

// Alternative action termination
void EndGameAll(string text) "End the game and display %0";
void _EndGamePlayerVictory(Actor victor, string wintext, string losetext) "End the game and display %1 to %0 and %2 to all others."; // obsolete
void EndGameCompanyVictory(Company victors, string wintext, string losetext) "End the game and display %1 to members of %0 and %2 to all others.";

// Trigger plans (Team AI)
void _ExecutePlanCamera(Plan plan) "Execute %0."; // obsolete
void ExecutePlanTeam(Plan plan, Team team) "Assign %0 to %1 and execute.";
void ExecutePlanVehicle(Plan plan, Vehicle vehicle) "Assign %0 to %1 and execute.";
void _AbortPlanCamera(Plan plan) "Cancel execution of %0."; // obsolete
void AbortPlanTeam(Team team) "Cancel execution of any plan assigned to %0.";
void AbortPlanVehicle(Vehicle vehicle) "Cancel execution of any plan assigned to %0.";

// Message boxes
void DisplayMessageBoxAll(string text, float time=3.0) "Display %0 to all players for %1 second(s).";
void DisplayMessageBoxPlayer(string text, float time=3.0, Actor player) "Display %0 to %2 for %1 second(s).";
void DisplayMessageBoxCompany(string text, float time=3.0, Company company) "Display %0 to all members of %2 for %1 second(s).";
void DisplayVoiceover(string text, string sound, float volume=1.0) "Display %0 while playing %1 at volume %2.";

// Cheats
void InvincibilityOnActor(Actor actor) "Make %0 invincible.";
void InvincibilityOffActor(Actor actor) "Make %0 vulnerable.";
void InvisibilityOnActor(Actor actor) "Make %0 undetectable.";
void InvisibilityOffActor(Actor actor) "Make %0 detectable.";

// Miscellaneous
void TeleportObject(Location object, Location destination) "Teleport %0 to %1.";
void KillActor(Actor actor) "Have %0 commit suicide.";
void Assert(bool condition, string message) "If %0 is false, add %1 to the error log.";
void SetActorKit(Actor actor, string kit) "Assign %1 to %0.";

// Hidden objects
void HideThing(Thing thing) "Hide %0 from the game world.";
void ShowThing(Thing thing) "Make %0 visible to the game world.";

// Company score
void CompanyScoreSet(Company company, int score=0) "Set the score for %0 to %1.";
void CompanyScoreIncrement(Company company) "Increment the score for %0.";
void CompanyScoreDecrement(Company company) "Decrement the score for %0.";

// Lighting
void _TurnLightsOn(int room) "Turn on all room lighting in %0."; // obsolete
void _TurnLightsOff(int room) "Turn off all room lighting in %0."; // obsolete

// Map object manipulation
void ResetMapObject(string object) "Reset of the state of %0.";
//void OpenDoor(string door) "Open %0.";
//void CloseDoor(string door) "Close %0.";
void OpenDoor(Door door) "Open %0.";
void CloseDoor(Door door) "Close %0.";
void DestroyMapObject(string object) "Destroy %0.";

// Objectives
void ObjectiveAdd(Objective objective) "Add %0 to the objective list.";
void ObjectiveRemove(Objective objective) "Remove %0 from the objective list.";
void ObjectiveComplete(Objective objective) "Mark %0 complete in the objective list.";
void ObjectiveFailed(Objective objective) "Mark %0 failed in the objective list.";

// Campaign rewards
void AwardDecoration(Decoration decoration, Actor actor) "Award %0 to %1.";
void _UnlockHeroCharacter() "Unlock the next hero character in the campaign.";

// Toggle team AI
void TeamAIOn(Team team) "Turn on team AI for %0.";
void TeamAIOff(Team team) "Turn off team AI for %0.";

// Flee behavior
void PanicActor(Actor actor) "Force %0 to flee.";
void PanicTeam(Team team) "Force %0 to flee.";
void PanicPlatoon(Platoon platoon) "Force %0 to flee.";
void PanicCompany(Company company) "Force %0 to flee.";

// Group invincibility
void InvincibilityOnTeam(Team team) "Make all members of %0 invincible.";
void InvincibilityOffTeam(Team team) "Make all members of %0 vulnerable.";
void InvincibilityOnPlatoon(Platoon platoon) "Make all members of %0 invincible.";
void InvincibilityOffPlatoon(Platoon platoon) "Make all members of %0 vulnerable.";
void InvincibilityOnCompany(Company company) "Make all actors in %0 invincible.";
void InvincibilityOffCompany(Company company) "Make all actors in %0 vulnerable.";

// Group invisibility (undetectable, non-targetable)
void InvisibilityOnTeam(Team team) "Make all members of %0 undetectable.";
void InvisibilityOffTeam(Team team) "Make all members of %0 detectable.";
void InvisibilityOnPlatoon(Platoon platoon) "Make all members of %0 undetectable.";
void InvisibilityOffPlatoon(Platoon platoon) "Make all members of %0 detectable.";
void InvisibilityOnCompany(Company company) "Make all actors in %0 undetectable.";
void InvisibilityOffCompany(Company company) "Make all actors in %0 detectable.";

// Inventory
void AmmoUnlimited() "Give all actors infinite ammunition.";
void AmmoLimited() "Cancel infinite ammunition setting.";
void ReplenishInventory(Actor actor) "Replenish the inventory of %0.";

// Disable autoend
void DisableAutoendNoPlayers() "Do not end the game automatically when there are no players left.";
void DisableAutoendTimer() "Do not end the game automatically when the game timer expires.";

// Escortable states
void CaptiveActorOn(Actor actor) "Set %0 to captive behavior.";
void CaptiveActorOff(Actor actor) "Cancel captive behavior for %0.";
void CaptiveTeamOn(Team team) "Set all members of %0 to captive behavior.";
void CaptiveTeamOff(Team team) "Cancel captive behavior for all members of %0.";
void HostageActorOn(Actor actor) "Set %0 to hostage behavior.";
void HostageActorOff(Actor actor) "Cancel hostage behavior for %0.";
void HostageTeamOn(Team team) "Set all members of %0 to hostage behavior.";
void HostageTeamOff(Team team) "Cancel hostage behavior for all members of %0.";

// Fog
void FogOn(int red, int green, int blue, float near, float far) "Turn on fog with color %0,%1,%2 between %3 and %4 meter(s).";
void FogOff() "Turn off fog";

// Toggle avatar switching
void AvatarSwitchingOn() "Allow players to change avatars.";
void AvatarSwitchingOff() "Prevent players from changing avatars.";

// Sounds
void PlaySound(string sound, float volume=1.0) "Play %0 at volume %1.";
void PlaySound3D(string sound, Location location, float volume=1.0, float loop=0.0) "Play %0 at %1 with volume %2, looping for %3 second(s).";
void PlaySoundPlayer(string male1, string male2, string female) "Play %0, %1, or %2 based on the composition of the player's platoon.";

void EffectActivate(Effect effect) "Activate %0.";

void AwardDecorationTeam(Decoration decoration, Team team) "Award %0 to all members of %1.";
void AwardDecorationPlatoon(Decoration decoration, Platoon platoon) "Award %0 to all members of %1.";

// Map properties
void WeatherChange(Weather weather="clear") "Change the weather to %0.";
void SpottingDistanceChange(float distance) "Change the maximum spotting distance to %0.";

// Spawning - for startup only
void SpawnActor(ActorRef actor, Team team, string class, string kit, Location location) "Spawn %0 onto %1 with %2 and %3 at %4.";
void SpawnTeam(TeamRef team, Platoon platoon) "Spawn %0 onto %1.";
void SpawnPlatoon(PlatoonRef platoon, Company company) "Spawn %0 onto %1.";
void SpawnCompany(CompanyRef company) "Spawn %0.";

// Direct block calls
void QueueCall(Group group) "Call %0 after this block.";
void RedirectIf(bool condition, Group group) "If %0, stop and queue a call to %1.";

// Looping
void QueueLoopActorsInCompany(Company company, Group group) "Use %1 to loop over all actors in %0 after this block.";
void QueueLoopActorsInPlatoon(Platoon platoon, Group group) "Use %1 to loop over all actors in %0 after this block.";
void QueueLoopActorsInTeam(Team team, Group group) "Use %1 to loop over all actors in %0 after this block.";
void QueueLoopCompanies(Group group) "Use %0 to loop over all companies after this block.";
void QueueLoopPlatoonsInCompany(Company company, Group group) "Use %1 to loop over all platoons in %0 after this block.";
void QueueLoopTeamsInPlatoon(Platoon platoon, Group group) "Use %1 to loop over all teams in %0 after this block.";

// Toggle platoon AI
void PlatoonAIOn(Platoon platoon) "Turn on platoon AI for %0.";
void PlatoonAIOff(Platoon platoon) "Turn off platoon AI for %0.";

void ConsoleCommand(string command) "Execute %0.";

void SpawnOpposingForce(int size=30) "Spawn an opposing force with %0 members.";

void VariableSetZone(ZoneRef variable, Zone zone) "Set %0 to %1.";

// Company objectives
void ObjectiveAddForCompany(Objective objective, Company company) "Add %0 to the objective list for %1.";
void ObjectiveRemoveForCompany(Objective objective, Company company) "Remove %0 from the objective list for %1.";
void ObjectiveCompleteForCompany(Objective objective, Company company) "Mark %0 complete in the objective list for %1.";
void ObjectiveFailedForCompany(Objective objective, Company company) "Mark %0 failed in the objective list for %1.";

// End game states
void MarkCompanyWin(Company company, string text) "Mark %0 as a winner and display %1 to its members";
void MarkCompanyLose(Company company, string text) "Mark %0 as a loser and display %1 to its members";
void MarkCompanyDraw(Company company, string text) "Mark %0 as tied and display %1 to its members";

void DestroyVehicle(Vehicle vehicle) "Destroy %0.";

void HideMapObject(string object) "Hide %0 from the game world.";
void ShowMapObject(string object) "Make %0 visible to the game world.";

void SetEndGameMovie(string file) "Show the movie %0 when the game ends.";

// Command map markers
void MapActorShow(Actor actor) "Show %0 on the command map for all players.";
void MapActorShowCompany(Actor actor, Company company) "Show %0 on the command map for members of %1.";
void MapActorHide(Actor actor) "Hide %0 on the command map for all players.";
void MapActorHideCompany(Actor actor, Company company) "Hide %0 on the command map for members of %1.";
void MapZoneShow(Zone zone, bool highlight=false) "Show %0 on the command map for all players, hightlight = %1.";
void MapZoneShowCompany(Zone zone, bool highlight=false, Company company) "Show %0 on the command map for members of %2, highlight = %1.";
void MapZoneHide(Zone zone) "Hide %0 on the command map for all players.";
void MapZoneHideCompany(Zone zone, Company company) "Hide %0 on the command map for members of %1.";

// Additional door operations
//void DoorBar(Door door) "Bar door %0.";
//void DoorUnBar(Door door) "UnBar door %0.";

void MapZoneColor(Zone zone, CompanyColor color="neutral") "Mark %0 %1.";

void DoorBar(Door door) "Bar %0.";
void DoorUnbar(Door door) "Unbar %0";

void TorchActorHeadOn(Actor actor) "Torch %0's Head ON";
void TorchActorHeadOff(Actor actor) "Torch %0's Head OFF";

/*
---QUERIES--- (always return non-void)
*/
// Flags and counters
query bool GetFlagState(Flag flag) "The state of %0";
query int GetCounter(Counter counter) "The value of %0";

// Integer arithmetic
query int GetSum(int value1, int value2) "The result of %0 plus %1";
query int GetDifference(int value1, int value2) "The result of %0 minus %1";
query int GetProduct(int value1, int value2) "The result of %0 multiplied by %1";
query int GetQuotient(int value1, int value2) "The result of %0 divided by %1";
// Floating point arithmetic
query float GetSum(float value1, float value2) "The result of %0 plus %1";
query float GetDifference(float value1, float value2) "The result of %0 minus %1";
query float GetProduct(float value1, float value2) "The result of %0 multiplied by %1";
query float GetQuotient(float value1, float value2) "The result of %0 divided by %1";

// Type conversions
query float ConvertIntegerToNumber(int value) "The number %0";
query int ConvertNumberToInteger(float value) "%0 truncated to an integer";

// Equalities
query bool CompareIntegers(int value1, int value2, CompareOp equality="is equal to") "%0 %2 %1";
query bool CompareFloats(float value1, float value2, FloatCompareOp equality="is less than") "%0 %2 %1";
query bool CompareThings(Thing thing1, Thing thing2, EqualityOp equality="is equal to") "%0 %2 %1";

// Logical operations
query bool And(bool value1, bool value2) "%0 and %1";
query bool Or(bool value1, bool value2) "%0 or %1";
query bool Not(bool value) "The inverse of %0";

// Statistics
query int GetKillsActor(Actor actor) "The number of kills for %0";
query int GetKillsCompany(Company company) "The number of kills for %0";
query int _GetDeathsActor(Actor actor) "The number of deaths for %0"; // obsolete
query int _GetDeathsCompany(Company company) "The number of deaths for %0"; // obsolete
query ActorRef GetActorMostKills() "The actor with the most kills";
query CompanyRef GetCompanyMostKills() "The company with the most kills";

// Campaign difficulty settings
query bool DifficultyEasy() "The campaign difficulty is set to Easy";
query bool DifficultyNormal() "The campaign difficulty is set to Normal";
query bool DifficultyHard() "The campaign difficulty is set to Hard";

// Random number generation
query int RandomInteger(int low=1, int high=10) "A random integer between %0 and %1";
query float RandomNumber(float low=0.0, float high=1.0) "A random number between %0 and %1";

// Active objects
query bool ActorActive(Actor actor) "%0 is active";
query int GetActiveActors() "The number of active actors";
query ActorRef GetFirstActiveActor() "The first active actor";
query int GetActiveCompanies() "The number of active companies";
query CompanyRef GetFirstActiveCompany() "The first active company";
query int GetCurrentTeamSize(Team team) "The number of active actors on %0";
query int GetCurrentCompanySize(Company company) "The number of active actors on %0";

// Parent access
query TeamRef GetActorTeam(Actor actor) "The team including %0";
query CompanyRef GetActorCompany(Actor actor) "The company including %0";
query CompanyRef GetVehicleCompany(Vehicle vehicle) "The company including %0";

query ActorRef GetActorShooter(Actor target) "The shooter who killed %0";
query ActorRef GetVehicleShooter(Vehicle target) "The shooter who destroyed %0";
query CompanyRef _GetActorShooterCompany(Actor target) "The company that killed %0"; // obsolete
query CompanyRef _GetVehicleShooterCompany(Vehicle target) "The company that destroyed %0"; // obsolete

// Detection
query bool ActorSeenByCompany(Actor actor, Company observers) "%0 is being seen by %1";
query bool ActorHeardByCompany(Actor actor, Company listeners) "%0 is being heard by %1";

// Miscellaneous
query float GetRange(Location location1, Location location2) "The distance between %0 and %1";
query ActorRef GetNearestActor(Location location) "The actor nearest %0";
query bool ActorValid(ActorRef actor) "%0 is a valid reference";

// Player access
query ActorRef GetPlayerActor() "The player-controlled actor";
query PlatoonRef GetPlayerPlatoon() "The player-controlled platoon";
query CompanyRef GetPlayerCompany() "The player-friendly company";
query CompanyRef _GetPlayerCompanyBlue() "The first multiplayer company"; // obsolete
query CompanyRef _GetPlayerCompanyGold() "The second multiplayer company"; // obsolete

// Hidden objects
query bool IsHidden(Thing thing) "%0 is currently hidden";
query bool IsShown(Thing thing) "%0 is currently shown";

// Room lighting
query bool LightsOn(int room) "The lights are on in %0";
query bool LightsOff(int room) "The lights are off in %0";
query int GetRoom(Location location) "The room containing %0";

// Map object states
query bool MapObjectDestroyed(string object) "%0 has been destroyed";
//query bool DoorOpen(string door) "%0 is open";
//query bool DoorClosed(string door) "%0 is closed";
query bool DoorOpen(Door door) "%0 is open";
query bool DoorClosed(Door door) "%0 is closed";

// Escort state
query bool IsBeingEscorted(Team team) "%0 is currently being escorted";
query CompanyRef GetEscortCompany(Team team) "The company currently escorting %0";

// Group detection
query bool TeamSeenByCompany(Team team, Company observers) "A member of %0 is being seen by %1";
query bool TeamHeardByCompany(Team team, Company listeners) "A member of %0 is being heard by %1";
query bool PlatoonSeenByCompany(Platoon platoon, Company observers) "A member of %0 is being seen by %1";
query bool PlatoonHeardByCompany(Platoon platoon, Company listeners) "A member of %0 is being heard by %1";
query bool CompanySeenByCompany(Company company, Company observers) "A member of %0 is being seen by %1";
query bool CompanyHeardByCompany(Company company, Company listeners) "A member of %0 is being heard by %1";

// Variable validation
query bool TeamValid(TeamRef team) "%0 is a valid reference";
query bool PlatoonValid(PlatoonRef platoon) "%0 is a valid reference";
query bool CompanyValid(CompanyRef company) "%0 is a valid reference";
query bool VehicleValid(VehicleRef vehicle) "%0 is a valid reference";

// String operations
query string ConvertIntegerToString(int value) "%0 as text";
query string ConvertNumberToString(float value) "%0 as text";
query string GetActorOwnerName(Actor actor) "The owner of %0";
query string ConcatenateStrings(string start, string end) "%0 + %1";

query int GetCurrentPlatoonSize(Platoon platoon) "The number of active actors on %0";

// Proximity
query int TeamMembersAtLocation(Team team, Location location, float range=10.0) "The number of members of %0 within %2 meter(s) of %1";
query int PlatoonMembersAtLocation(Platoon platoon, Location location, float range=10.0) "The number of members of %0 within %2 meter(s) of %1";
query int CompanyMembersAtLocation(Company company, Location location, float range=10.0) "The number of members of %0 within %2 meter(s) of %1";

// Platoon capabilities
query int PlatoonDemoChargeCount(Platoon platoon) "The number of demo charges available to %0";
query int PlatoonAntiTankRocketCount(Platoon platoon) "The number of anit-tank rockets available to %0";

// More detection
query bool ActorSeenByActor(Actor actor, Actor observer) "%0 is being seen by %1";
query bool ActorHeardByActor(Actor actor, Actor listener) "%0 is being heard by %1";
query bool PlatoonSeenByPlatoon(Platoon platoon, Platoon observers) "A member of %0 is being seen by %1";
query bool PlatoonHeardByPlatoon(Platoon platoon, Platoon listeners) "A member of %0 is being heard by %1";

query bool ActorWounded(Actor actor) "%0 is wounded";

// Zone access
query ZoneRef GetCentralArea() "The central area";
query ZoneRef GetReconInsertion() "The recon insertion zone";
query ZoneRef GetReconExtraction() "The recon extraction zone";
query ZoneRef GetBase(int index=0) "Base %0";

// Spotlights
query bool SpotlightHasTarget(string spotlight) "%0 has a target";
query ActorRef SpotlightGetTarget(string spotlight) "The target of %0";

query bool ZoneValid(ZoneRef zone) "%0 is a valid reference";

query int GetCompanyScore(Company company) "The score for %0";

query PlatoonRef GetActorPlatoon(Actor actor) "The platoon including %0";

query bool CompanyPresent(Company company) "A player on %0 is connected";

// Support Teams Allowed
query bool AreSupportTeamsAllowed() "Are support teams allowed";

query CompanyColor GetCompanyColor(Company company) "The color of %0";
